package com.bridgeintelligent.tag.customer.ocdsm;

import com.bridgeintelligent.tag.user.mgmt.pojo.User;
import com.bridgeintelligent.tag.utils.DateHelper;
import com.bridgeintelligent.tag.webserver.security.TagSecurityHelper;
import com.ocdsm.FileInfo;
import com.ocdsm.OCDSMInfo;
import com.ocdsm.OCDSMServiceImpl;
import com.ocdsm.ResultObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

import static com.bridgeintelligent.tag.utils.DateHelper.PATTERN_DATE_11;

/**
 * @Author：liwei
 * @Date：2023/11/7 14:48
 * @Desc：
 * 说明：接入Ocdsm的ocdsm-1.0-SNAPSHOT.jar中含有两份配置文件，需要区分环境。
 * 部署测试过程中，如果涉及到测试和生产的环境问题，需要按照文件里面的配置说明进行配置。！！！！！！
 * 没有看错 ！！！！就是要改正对接的jar包里面的配置文件，而不是改本地的配置
 */
@Service
@Slf4j
public class OcdsmServiceImpl implements OcdsmService{


    @Override
    public ResultObject queryState(String zipFileName) {
        ResultObject res = new ResultObject();
        try {
            Boolean flag = new OCDSMServiceImpl(configPath).queryState(zipFileName,timeout,true);
            res.setResult(flag?CODE_100420:CODE_99003);
            log.info("=====>文件【{}]轮训查询状态(异步查询):{}",zipFileName,res.getResult());
        }catch (Exception e){
            e.printStackTrace();
            res.setResult(CODE_99002);
            log.error("=====>本地配置文件路径【{}】无法找到!!!",configPath);
        }
        return res;
    }

    @Override
    public ResultObject sendFile(OcdsmModel model) {
        ResultObject res = new ResultObject();
        try {
            User user = TagSecurityHelper.currentUser();
            /*1、组装报文*/
            OCDSMInfo oi = new OCDSMInfo();
            oi.setSender(user.getUserId());//发送者
//            oi.setSender("752134");//发送者
            FileInfo fileInfo=new FileInfo();
            String filepath  = model.getFilePath();//原始文件所在路径
            String originalFileSuffix = filepath.substring(filepath.lastIndexOf("."));
            String fileName = SYSTEM_CODE+"_"+EXPORT_CODE+"_"+DateHelper.currentDateTime(PATTERN_DATE_11)+"_"+getNumSuffix()+originalFileSuffix;
            fileInfo.setFileName(fileName);//最终显示名称
            if(new File(filepath).exists()){
                FileUtils.copyFile(new File(filepath),new File(remoteFilePath+fileInfo.getFileName()));
            }else{
                res.setResult(CODE_99001);
                log.error("=====>本地目标文件【{}】不存在！！！！",filepath);
                return res;
            }
            oi.fileInfo =fileInfo;
            List<String> ls=new ArrayList<>();//接收人员列表
            ls.add(user.getUserId());
//            ls.add("752134");
            oi.setReceiver(ls);//添加接受者
            oi .setValidDate(0,getAfterYearsDate(1));//设置截止日期//二选一必填
            //oi.setEnterpriseInfo(500,"email|phoneNum|bank_Card|...”);//对公客户信息
            oi.setPrivacyInfo(199,"email|phoneNum|bank_Card|..."); //对私客户信息
            oi.setFilePath(remoteFilePath+fileInfo.getFileName()); //原始文件路径
            log.info("=====>本地文件路径:{}",remoteFilePath+fileInfo.getFileName());
            /*2、发送文件*/
            res =new OCDSMServiceImpl(configPath).sendFile(oi);//读取配置文件,调用接口发送文件
            log.info("=====>接收用户:【{}】,原文件:【{}】,最终压缩路径:【{}]，最终操作结果:【{}】",oi.getSender(),oi.fileInfo.getFileName(),res.getZipFilePath(),res.getResult());
        }catch(IOException e){
            log.error("=====>本地配置文件路径【{}】无法找到!!!",configPath);
            e.printStackTrace();
            res.setResult(CODE_99002);
        }
        return res;
    }

    private String getAfterYearsDate(int years){
        DateTimeFormatter dft=DateTimeFormatter.ofPattern(DateHelper.PATTERN_DATE_1);
        LocalDate today =LocalDate.now();
        LocalDate afterDays =today.plusYears(years);
        return afterDays.format(dft);
    }

    private String getNumSuffix(){
        int num = GlobalIncr.getAndIncrement();
        return num>9?String.valueOf(num):String.format("%02d",num);
    }
}
